home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #4 / Amiga Plus CD - 2000 - No. 4.iso / Tools / Grafik / Misc / ImageEnginer / ARexx / Shear.rexx < prev    next >
Encoding:
OS/2 REXX Batch file  |  1999-09-18  |  3.9 KB  |  193 lines

  1. /*
  2. ** $VER: Shear 2.12, IE Arexx script
  3. ** Image Engineer Macro script
  4. ** Copyright © by Patrik M Nydensten
  5. ** 14/1 1997 Stockholm/Sweden
  6. **
  7. ** Shear PRIMARY image at X or/and Y-axis.
  8. **
  9. ** MS: Alpha now uses zoomlevel of original image
  10. ** MS: Support for saving last used results added
  11. */
  12.  
  13. Options Results
  14. Signal on error
  15.  
  16. if arg()==0 then exit
  17. pic=arg(1)
  18.  
  19. PROJECT_INFO pic WIDTH
  20. IW=result
  21. PROJECT_INFO pic HEIGHT
  22. IH=result
  23. PROJECT_INFO pic ZOOM
  24. origzoomval=result
  25.  
  26.  
  27. if exists("ie:prefs/veshear.cfg") == "1" then
  28.   do
  29.     call open("temp","ie:prefs/veshear.cfg","R")
  30.     values=readln("temp")
  31.     parse var values ok Xoff Yoff ResizeQ .
  32.     call close("temp")
  33.   end
  34. else
  35.   do
  36.     Xoff=100
  37.     Yoff=0
  38.     ResizeQ=0
  39.   end
  40.  
  41. 'FORM "Share" "Use|Cancel"',
  42. 'INTEGER,"X Amount",'||((-3)*IW)|| ',' ||(IW*3)|| ','Xoff',SLIDER',
  43. 'INTEGER,"Y Amount",'||((-3)*IH)|| ',' ||(IH*3)|| ','Yoff',SLIDER',
  44. 'CHECKBOX,"Use original image size",'ResizeQ''
  45.  
  46. values=result
  47. parse var result ok Xoff Yoff ResizeQ .
  48.  
  49. if ok = 0 then exit
  50.  
  51. call open("temp","ie:prefs/veshear.cfg","W")
  52. res=writeln("temp",values)
  53. call close("temp")
  54.  
  55.  
  56. 'RESIZE' pic IW IH
  57. LoadImage = Result
  58.  
  59. /* X shearing ------------------------------ */
  60.  
  61. 'PROJECT_INFO' LoadImage 'WIDTH'    /* Get width of image */
  62. IW = RESULT
  63. 'PROJECT_INFO' LoadImage 'HEIGHT'   /* Get height of image */
  64. IH = RESULT
  65.  
  66. if ResizeQ = 0 then do
  67.   'RESIZE' LoadImage (IW+abs(Xoff)*2) IH 'CENTER'
  68.   NewImage = Result
  69.   'CLOSE' LoadImage
  70.   LoadImage = NewImage
  71. end
  72.  
  73. if Xoff ~= 0 then do
  74.   'OPEN' '"IE:Alpha/Gradient.alpha"' '8BIT'
  75.   GradientImage = Result
  76.  
  77.   PROJECT_SET gradientimage ZOOM origzoomval
  78.  
  79.   'ROTATE' GradientImage 90 'FAST'
  80.   RotatedImage = Result
  81.   'CLOSE' GradientImage
  82.  
  83.   'SCALE' RotatedImage (IW+abs(Xoff)*2) IH 'BEST'  
  84.   XAlphaImage = Result
  85.   'CLOSE' RotatedImage
  86. end
  87.  
  88. do while (Xoff ~= 0)
  89.  
  90.   if Xoff > 0 then do
  91.     if Xoff > 127 then do
  92.       XD = 127 ; Xoff = Xoff - XD
  93.     end
  94.     else do
  95.       XD = Xoff ; Xoff = Xoff - XD
  96.     end
  97.   end
  98.   else do
  99.     if Xoff < -127 then do
  100.       XD = -127 ; Xoff = Xoff - XD
  101.     end
  102.     else do
  103.       XD = Xoff ; Xoff = Xoff - XD
  104.     end
  105.   end
  106.  
  107.   'MARK' XAlphaImage 'ALPHA'
  108.   'MARK' LoadImage 'PRIMARY'
  109.  
  110.   'DISPLACE' XD 0 CalcType
  111.   NewImage = result
  112.   'CLOSE' LoadImage
  113.   LoadImage = NewImage
  114.  
  115. end
  116.  
  117. if XAlphaImage ~= 'XALPHAIMAGE' then 'CLOSE' XAlphaImage
  118.  
  119.  
  120. /* Y shearing ------------------------------ */
  121.  
  122. 'PROJECT_INFO' LoadImage 'WIDTH'    /* Get width of image */
  123. IW = RESULT
  124. 'PROJECT_INFO' LoadImage 'HEIGHT'   /* Get height of image */
  125. IH = RESULT
  126.  
  127. if ResizeQ = 0 then do
  128.   'RESIZE' LoadImage IW (IH+abs(Yoff)*2) 'CENTER'
  129.   NewImage = Result
  130.   'CLOSE' LoadImage
  131.   LoadImage = NewImage
  132. end
  133.  
  134. if Yoff ~= 0 then do
  135.   'OPEN' '"IE:Alpha/Gradient.alpha"' '8BIT'
  136.   GradientImage = Result
  137.  
  138.   'SCALE' GradientImage IW (IH+abs(Yoff)*2) 'BEST'  
  139.   YAlphaImage = Result
  140.   'CLOSE' GradientImage
  141. end
  142.  
  143. do while (Yoff ~= 0)
  144.  
  145.   if Yoff > 0 then do
  146.     if Yoff > 127 then do
  147.       YD = 127 ; Yoff = Yoff - YD
  148.     end
  149.     else do
  150.       YD = Yoff ; Yoff = Yoff - YD
  151.     end
  152.   end
  153.   else do
  154.     if Yoff < -127 then do
  155.       YD = -127 ; Yoff = Yoff - YD
  156.     end
  157.     else do
  158.       YD = Yoff ; Yoff = Yoff - YD
  159.     end
  160.   end
  161.  
  162.   'MARK' YAlphaImage 'ALPHA'
  163.   'MARK' LoadImage 'PRIMARY'
  164.  
  165.   'DISPLACE' 0 YD CalcType
  166.   NewImage = result
  167.   'CLOSE' LoadImage
  168.   LoadImage = NewImage
  169.  
  170. end
  171.  
  172. if YAlphaImage ~= 'YALPHAIMAGE' then 'CLOSE' YAlphaImage
  173.  
  174. exit
  175.  
  176. /*******************************************************************/
  177. /* This is where control goes when an error code is returned by IE */
  178. /* It puts up a message saying what happened and on which line     */
  179. /*******************************************************************/
  180. error:
  181. if RC=5 then do         /* Did the user just cancel us? */
  182.     IE_TO_FRONT
  183.     LAST_ERROR
  184.     'REQUEST "'||Result||'"'
  185.     exit
  186. end
  187. else do
  188.     IE_TO_FRONT
  189.     LAST_ERROR
  190.     'REQUEST "Error detected!!!'||D2C(10)||'Image Engineer error message is as follows'||D2C(10)||Result||D2C(10)||'Script failed on line '||SIGL||'"' 'Doh!'
  191.     exit
  192. end
  193.